﻿using System.Collections.Generic;
using System.Linq;
using Neptuno.Model;

namespace Neptuno.Component
{
    public class BuquesComponent : BaseComponent
    {
        public Buques Agregar(Buques Buque)
        {
            Context.Buques.AddObject(Buque);
            Context.TryToSave();
            return Buque;
        }

        public List<Buques> Listar(bool habilitado, int? skip = null, int? range = null)
        {
            Context.Lineas.ToList();
            Context.Paises.ToList();

            List<Buques> Lista = Context.Buques.Where(t => t.habilitado == habilitado).ToList();

            if (skip.HasValue && range.HasValue)
                Lista = Lista.Skip(skip.Value).Take(range.Value).ToList();

            Lista.ForEach(t => t.Lineas.Buques = null);
            Lista.ForEach(t => t.Paises.Buques = null);

            return Lista;
        }

        public List<Buques> Listar(int idLinea, int? skip = null, int? range = null)
        {
            Context.Lineas.ToList();
            Context.Paises.ToList();

            List<Buques> Lista = Context.Buques.Where(t => t.idLinea == idLinea).ToList();

            if (skip.HasValue && range.HasValue)
                Lista = Lista.Skip(skip.Value).Take(range.Value).ToList();

            Lista.ForEach(t => t.Paises.Buques = null);

            return Lista;
        }

        public Buques GetById(int idBuque)
        {
            Context.Paises.ToList();
            Context.Lineas.ToList();

            return Context.Buques.SingleOrDefault(t => t.idBuque == idBuque);
        }

        public bool Actualizar(Buques Buque)
        {
            Buques myBuque = Context.Buques.SingleOrDefault(t => t.idBuque == Buque.idBuque);
            myBuque.idLinea = Buque.idLinea;
            myBuque.idPais = Buque.idPais;
            myBuque.nombre = Buque.nombre;
            myBuque.anio = Buque.anio;
            myBuque.armador = Buque.armador;
            myBuque.caladoMax = Buque.caladoMax;
            myBuque.capitan = Buque.capitan;
            myBuque.deadWeight = Buque.deadWeight;
            myBuque.email = Buque.email;
            myBuque.feus = Buque.feus;
            myBuque.fleteador = Buque.fleteador;
            myBuque.grossWight = Buque.grossWight;
            myBuque.gruas = Buque.gruas;
            myBuque.hold = Buque.hold;
            myBuque.imo = Buque.imo;
            myBuque.loa = Buque.loa;
            myBuque.manga = Buque.manga;
            myBuque.material = Buque.material;
            myBuque.netWeight = Buque.netWeight;
            myBuque.numeroOficial = Buque.numeroOficial;
            myBuque.pasajeros = Buque.pasajeros;
            myBuque.piClub = Buque.piClub;
            myBuque.puertoMatricula = Buque.puertoMatricula;
            myBuque.refersSocket = Buque.refersSocket;
            myBuque.teus = Buque.teus;
            myBuque.tripulacion = Buque.tripulacion;
            myBuque.velocidadMax = Buque.velocidadMax;

            return Context.TryToSave();
        }

        public bool Borrar(int idBuque)
        {
            Buques Buque = Context.Buques.Single(t => t.idBuque == idBuque);
            Buque.habilitado = false;
            return Context.TryToSave();
        }

        public bool Habilitar(int idBuque)
        {
            Buques Buque = Context.Buques.Single(t => t.idBuque == idBuque);
            Buque.habilitado = true;
            return Context.TryToSave();
        }
    }
}
